package mumu.android.localstorage;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import mumu.android.R;
import mumu.android.lib.localstorage.NewsEn;
import mumu.android.lib.tool.Tools;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import android.app.Dialog;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.TextView;

/**
 * xml(EXtensible Markup
 * Language):可扩展的标记语言，可用于标记数据、定义数据类型，是一种允许用户对自己的标记鱼眼进行定义的源语言，
 * 用于存储、传输结构化数据。具有平台无关性的特点，广泛应用在数据通信中。 在android中，通常有三种方式解析xml:Dom、SAX和PULL.
 * 这篇主要介绍Dom解析方式 Dom（Document Object
 * Model文档对象模型）解析需要先把xml文档加载到内存中，构建一个树形结构，然后使用DOM
 * API来访问树形结构进行遍历和检索数据。由于解析需要加载整个xml文档到内存构建树形结构
 * ，对于数据量较大的xml文件，会出现效率问题，所以大文件不推荐使用这种方式。
 * 
 * 
 * @author Administrator
 * 
 */
public class xml_dom extends DialogFragment {

	static xml_dom instance;

	public static xml_dom getInstance() {
		if (instance == null) {
			instance = new xml_dom();
		}
		return instance;
	}

	Dialog dialog;
	TextView txt;

	@Override
	public Dialog onCreateDialog(Bundle savedInstanceState) {
		dialog = new Dialog(getActivity(), R.style.dialog);
		LayoutInflater layoutInflater = LayoutInflater.from(getActivity());
		View view = layoutInflater.inflate(R.layout.dialog_listview, null);
		view.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
		dialog.setContentView(R.layout.dialog_listview);
		dialog.setCanceledOnTouchOutside(true);
		String xmlstr = "<update>" + "<newsid code=\"100\">2</newsid>" + "<newstitle>baidu_xinwen_1.1.0.apk</newstitle>"
				+ "<defaultlogo>http://gdown.baidu.com/data/wisegame/f98d235e39e29031/baiduxinwen.apk</defaultlogo>" + "</update>";
		try {
			InputStream is = new ByteArrayInputStream(xmlstr.getBytes("utf-8"));
			Tools.toast(getActivity(), parseVsXml(is).toString());
		} catch (Exception e) {
			e.printStackTrace();
		}
		return dialog;
	}

	/**
	 * 
	 * @param inStream
	 * @return
	 * @throws Exception
	 */
	private NewsEn parseVsXml(InputStream inStream) throws Exception {
		NewsEn newsEn = new NewsEn();
		Element root = getElement(inStream);
		NodeList childNodes = root.getChildNodes();
		for (int j = 0; j < childNodes.getLength(); j++) {
			// 遍历子节点
			Node childNode = (Node) childNodes.item(j);
			if (childNode.getNodeType() == Node.ELEMENT_NODE) {
				Element childElement = (Element) childNode;
				if ("newsid".equals(childElement.getNodeName())) {
					newsEn.code = childElement.getAttribute("code");
					newsEn.newsid = Tools.toInt(childElement.getFirstChild().getNodeValue());
				} else if (("defaultlogo".equals(childElement.getNodeName()))) {
					newsEn.defaultlogo = childElement.getFirstChild().getNodeValue();
				} else if (("newstitle".equals(childElement.getNodeName()))) {
					newsEn.newstitle = childElement.getFirstChild().getNodeValue();
				}
			}
		}
		return newsEn;
	}

	public static Element getElement(InputStream inStream) throws Exception {
		// 通过文档构建器工厂获取一个文档构建器
		DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
		// 通过文档构建器构建一个文档实例
		Document document = builder.parse(inStream);
		// 获取XML文件根节点
		Element root = document.getDocumentElement();
		return root;
	}
}
